package br.com.gadje.arquitetura.util;

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Collection;

/**
 * Classe que contém os métodos auxiliares do sistema.
 * 
 * @author Joilson Abrantes
 *
 */
public class GADJEUtil {

	/**
	 * Gera o MD5 de uma string passada como parâmetro.
	 * 
	 * @param texto
	 * @return
	 * @throws UnsupportedEncodingException 
	 */
	public static String toMD5(String texto) throws UnsupportedEncodingException {
		MessageDigest md = null;
		try {
			md = MessageDigest.getInstance("MD5");

			BigInteger hash = new BigInteger(1, md.digest(texto.getBytes("UTF-8")));
			String s = hash.toString(16);
			while (s.length() < 32)
				s = "0" + s;
			return s;

		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * Metodo usado para gerar o texto da cláusula IN de query SQL.
	 * 
	 * @param ids
	 * @return
	 */
	public static String gerarTextoClausulaIn(Collection<Long> ids) {
		String retorno = "(";
		
		for (Object objeto : ids) {
			retorno += objeto + ", ";
		}
		
		retorno += ")";
		retorno = retorno.replaceAll(",\\s[)]", ")");
		
		return retorno;
	}
	
	/**
	 * Método usado para converter um arranjo de bytes em um long.
	 * 
	 * @param bytes
	 * @return
	 */
	public static long toLong(byte[] bytes) {
		long value = 0;
		
		for (int i = 0; i < bytes.length; i++)
		{
		   value = (value << 8) + (bytes[i] & 0xff);
		}
		
		return value;
	}
	
	/**
	 * Retorna o tempo em milissegundos passado a quantidade de dias, horas ou minutos o tipo indica
	 * a unidade. 2 = dia, 1 = hora, 3 = mêse = ano.
	 * @param quantidade
	 * @param tipo
	 * @return
	 */
	public static long calcularMilisegunos(int quantidade, int tipo){
		if(tipo == 3){
			return 1000*30*24*60*60*quantidade;
		}
		if(tipo == 2){
			return 1000*24*60*60*quantidade;
		}
		if(tipo == 1){
			return 1000*60*60*quantidade;
		}
		if(tipo == 4){
			return 1000*365*24*60*60*quantidade;
		}
		
		return 0;
	}
}
